# Author: slowchen
# Time: 2019/1/21 15:30
# Description:
import datetime
import json

import itchat

# 发送给ssr使用者的文字
send_to_user_msg = '[温馨提示] 截至到今天，您购买的SSR即将过期，请确认是否继续使用\n[SSR信息] %s:%s\n[金额] %s\n[上次付款时间] %s\n[购买用户] %s'

# 发送给自己（文件传输助手）的文字
send_to_self_msg = '[温馨提示] 截至到今天，有%d位用户购买的SSR即将过期，请联系并确认是否继续使用\n第%d位\n[SSR信息] %s:%s\n[金额] %s\n[上次付款时间] %s\n[购买用户] %s'

# 登陆微信，热登陆，可保持登陆状态
itchat.auto_login(hotReload=True)


def get_date():
    """
    获取30天前的时间，用来比对购买日期，确定是否过期
    :return:
    """
    now = datetime.datetime.now()
    before = now + datetime.timedelta(days=-30)
    before = before.strftime('%Y-%m-%d')
    return before


try:
    with open('ssr.json', 'r') as f:
        lists = json.load(f)
        expired_list = []
        for i in lists:
            last_buy_date = i['last_buy_date']
            if last_buy_date < get_date():
                # 从原始json文件中获取上次购买日期小于30天前日期的数据，并添加到过期的列表中
                expired_list.append(i)
        if len(expired_list) > 0:
            # 如果过期的列表有数据，打印并通过微信发送给用户和自己
            print("请注意，有%d位用户已到期，请催收费用" % len(expired_list))
            print("信息如下：")
            print('=' * 32)
            for j in expired_list:
                print("第%d位" % (expired_list.index(j) + 1))
                host = j['host']
                port = j['port']
                price = j['price']
                last_buy_date = j['last_buy_date']
                customer = j['customer']
                print(send_to_user_msg % (host, port, price, last_buy_date, customer))

                try:
                    # 异常情况，如果备注没有设置，则找不到这个人，会报错，提示去检查
                    user = itchat.search_friends(remarkName='vpn%s@%s' % (port, price))[0]
                    user.send(send_to_user_msg % (host, port, price, last_buy_date, customer))
                    print('已发送给微信用户：%s' % customer)
                except IndexError as e:
                    print('备注vpn%s@%s未在您的微信好友中找到，请确认是否已修改好友备注，或者检查json文件中数据是否填写正确' % (port, price))
                itchat.send(send_to_self_msg % (
                    len(expired_list), (expired_list.index(j) + 1), host, port, price, last_buy_date, customer),
                            'filehelper')
                print('已发送给文件传输助手')
                print('=' * 32)
        else:
            print('[温馨提示] 截至到今天，暂无到期的用户')
        input('按Enter键关闭窗口')
except FileNotFoundError as e:
    print('请将ssr.json放在本程序同一目录下，然后重新运行本程序')
    input('按Enter键关闭窗口')
